"""
870. 优势洗牌
中等
相关标签
相关企业
给定两个长度相等的数组 nums1 和 nums2，nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。

返回 nums1 的 任意 排列，使其相对于 nums2 的优势最大化。



示例 1：

输入：nums1 = [2,7,11,15], nums2 = [1,10,4,11]
输出：[2,11,7,15]
示例 2：

输入：nums1 = [12,24,8,32], nums2 = [13,25,32,11]
输出：[24,32,8,12]


提示：

1 <= nums1.length <= 105
nums2.length == nums1.length
0 <= nums1[i], nums2[i] <= 109
"""


class Solution(object):
    def advantageCount(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        l = len(nums1)
        ar1 = range(l)
        ar2 = range(l)
        ar1 = sorted(ar1,key=lambda x: nums1[x])
        ar2 = sorted(ar2,key=lambda x: nums2[x])
        i1 = 0
        i2 = 0
        res = [0] * l
        r = l
        while i1 < l and i2 < l:
            if nums1[ar1[i1]] > nums2[ar2[i2]]:
                res[ar2[i2]] = nums1[ar1[i1]]
                i1 += 1
                i2 += 1
            else:
                res[ar2[r - 1]] = nums1[ar1[i1]]
                r-=1
                i1 += 1
        return res


if __name__ == '__main__':
    # nums1 = [2,7,11,15]
    # nums2 = [1,10,4,11]
    # print(Solution().advantageCount(nums1, nums2))

    nums1 = [5621,1743,5532,3549,9581]
    nums2 = [913,9787,4121,5039,1481]
    print(Solution().advantageCount(nums1, nums2))
